package com.yymx.toback.common.util;

import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class MyIpUtils {

    /**
     * 获取用户真是Ip地址
     *
     * @param request
     * @return
     */
    public static String getClientIpAddress(HttpServletRequest request) {
        String ipAddress = null;
        // ipAddress = this.getRequest().getRemoteAddr();
        ipAddress = request.getHeader("x-forwarded-for");
        if (!isIP(ipAddress) && (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress))) {
            ipAddress = request.getHeader("Proxy-Client-IP");
        }
        if (!isIP(ipAddress) && (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress))) {
            ipAddress = request.getHeader("WL-Proxy-Client-IP");
        }
        if (!isIP(ipAddress) && (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress))) {
            ipAddress = request.getRemoteAddr();
            if (ipAddress.equals("127.0.0.1")) {
                // 根据网卡取本机配置的IP
                InetAddress inet = null;
                try {
                    inet = InetAddress.getLocalHost();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                }
                ipAddress = inet.getHostAddress();
            }

        }
        // 对于通过多个代理的情况，第一个IP为客户端真实IP,多个IP按照','分割
        if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
            String[] ips = ipAddress.split(",");
            for (String string : ips) {
                if(isIP(string)){
                    ipAddress = string;
                    break;
                }
            }
        }
        return EmptyUtil.isNotEmpty(ipAddress)?ipAddress.trim():ipAddress;
    }

    private static boolean isIP(String ip) {
        return !(EmptyUtil.isEmpty(ip) || ip.startsWith("10.") || ip.startsWith("192.168.") || ip.startsWith("172.") || ip.startsWith("127."));
    }


    public static String loadInterHostIp() {

        return "122.112.254.190";

//        CloseableHttpClient httpClient = HttpClients.createDefault();
//        HttpPost post = new HttpPost("10.159.161.206:10004/ip/get");
//        RequestConfig config = RequestConfig.custom()
//                .setConnectionRequestTimeout(10000).setConnectTimeout(10000)
//                .setSocketTimeout(10000).build();
//        CloseableHttpResponse response = null;
//        try {
//            post.setConfig(config);
//            response = httpClient.execute(post);
//            HttpEntity entity = response.getEntity();
//            String content = EntityUtils.toString(entity);
//            EntityUtils.consume(entity);
//            return content;
//        } catch (IOException e) {
//            e.printStackTrace();
//        } finally {
//            try {
//                response.close();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//        return "";
    }
}
